using System;
using RideMe.AddIns.Events;

namespace RideMe.AddIns.Interfaces
{
    /// <summary>
    /// This defines the interface for the application context, giving each add-in a window into the exposed features of RIDE-ME, using events
    /// Each implementation must expose various events, allowing add-ins to choose what events they respond to, and how, in order to implement their features
    /// </summary>
    public interface IApplicationContext
    {
        #region Properties

        /// <summary>
        /// This exposes a selection of events defining add-in actions
        /// </summary>
        AddInEventSource AddInEvents { get; }
        /// <summary>
        /// This exposes events related to the user interface
        /// </summary>
        UserInterfaceEventSource UserInterfaceEvents { get; }
        /// <summary>
        /// This exposes events related to the project file being loaded, worked on, or closed
        /// </summary>
        ProjectEventSource ProjectEvents { get; }
        /// <summary>
        /// This exposes events related to the text editor
        /// </summary>
        EditorEventSource EditorEvents { get; }

        #endregion
    }
}
